package com.hwtx.form.domain.handle.datamodel;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hwtx.form.domain.FormConstants;
import com.hwtx.form.persistence.SQLType;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;

/**
 * <p>
 * 表单定义明细表
 * </p>
 *
 * @author baomidou
 * @since 2024-07-07
 */
@Getter
@Setter
@ToString
@TableName(value = "data_model_detail", excludeProperty = {"afterFieldName", "canOp"})
public class DataModelDetail implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 序号
     */
    @TableField("num")
    private Integer num;
    /**
     * 模型名称
     */
    @TableField("model_name")
    private String modelName;
    /**
     * 表名
     */
    @TableField("table_name")
    private String tableName;
    /**
     * 状态（1：有效，0：无效）
     */
    @TableField("status")
    private int status = FormConstants.Status.VALID.getCode();
    /**
     * 名称
     */
    @TableField("name")
    private String name;

    /**
     * 描述
     */
    @TableField("description")
    private String description;

    /**
     * 长度
     */
    @TableField(value = "length", insertStrategy = FieldStrategy.ALWAYS, updateStrategy = FieldStrategy.ALWAYS)
    private Integer length;

    /**
     * 是否唯一
     */
    @TableField("is_unique")
    private Byte isUnique = 0;

    /**
     * 小数点位数
     */
    @TableField("points")
    private Integer points;

    /**
     * 默认值
     */
    @TableField("def_value")
    private String defValue;

    /**
     * 类型
     */
    @TableField("type")
    private SQLType type;

    /**
     * 是否主键
     */
    @TableField("pri_key")
    private Byte priKey;

    /**
     * 是否必填
     */
    @TableField("not_null")
    private Byte notNull;
    /**
     * 是否系统字段
     */
    @TableField("sys")
    private Byte sys;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    @JsonIgnore
    private Date createTime;

    /**
     * 创建人ID
     */
    @TableField(value = "create_id", fill = FieldFill.INSERT)
    @JsonIgnore
    private String createId;

    /**
     * 修改时间
     */
    @TableField(value = "update_time", fill = FieldFill.UPDATE)
    @JsonIgnore
    private Date updateTime;

    /**
     * 更新人ID
     */
    @TableField(value = "update_id", fill = FieldFill.UPDATE)
    @JsonIgnore
    private String updateId;

    @JsonIgnore
    private String afterFieldName;
    /**
     * 是否可操作，待调整
     */
    private byte canOp = 1;
}
